package com.chart.chart.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.chart.chart.domian.ChartOrders;
import com.chart.chart.mapper.ChartOrdersMapper;
import com.chart.chart.service.IChartOrdersService;
import com.chart.common.utils.SecurityUtils;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List;

/**
 * 用户 业务层处理
 *
 * @author ruoyi
 */
@Service
public class ChartOrdersServiceImpl extends ServiceImpl<ChartOrdersMapper, ChartOrders> implements IChartOrdersService {


    @Autowired
    private ChartOrdersMapper chartOrdersMapper;



    @Override
    public boolean updateOrderStatu(String orderNum) {
        return chartOrdersMapper.updateOrderStatu(orderNum);
    }

    //    @Override
//    public List<ChartOrders> listOrdersSortedByCreateTime() {
//        Long userId = SecurityUtils.getUserId();
//        LambdaQueryWrapper<ChartOrders> lqw = new LambdaQueryWrapper<>();
//        lqw.eq(ChartOrders::getUserId, userId);
//        lqw.orderByDesc(ChartOrders::getCreateTime); // 按 create_time 降序排序
//        List<ChartOrders> ordersList = list(lqw);
//        int  total = ordersList.size();
//
//        // 修改 totalPrice 字段的值，转换为元
//        for (ChartOrders order : ordersList) {
//            order.setTotal(total);
//            if (order.getTotalPrice() != null) {
//                // 将分转换为元，保留两位小数
//                BigDecimal priceInYuan = BigDecimal.valueOf(order.getTotalPrice()).divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_HALF_UP);
//                order.setTotalPriceInYuan(priceInYuan);
//            }
//            // 处理 invoice 字段，当 invoice 为 null 或者为空时，将其设置为 0
//            if (order.getInvoice() == null || order.getInvoice() ==0) {
//                order.setInvoiceStatus("未开票");// 设置发票字段为 0
//            }else if(order.getInvoice() == 1){
//                order.setInvoiceStatus("已开票");// 设置发票字段为 1
//            }
//
//            // 根据 status 设置支付状态
//            if (order.getStatus() != null) {
//                if (order.getStatus() == 0) {
//                    order.setPaymentStatus("未支付");
//                } else if (order.getStatus() == 1) {
//                    order.setPaymentStatus("已支付");
//                }
//            }
//
//        }
//        return ordersList;
//    }
    @Override
    public List<ChartOrders> listOrdersSortedByCreateTime(int pageNum, int pageSize) {
        Long userId = SecurityUtils.getUserId();

        // 使用 MyBatis-Plus 提供的分页类 Page
        Page<ChartOrders> page = new Page<>(pageNum, pageSize);

        LambdaQueryWrapper<ChartOrders> lqw = new LambdaQueryWrapper<>();
        lqw.eq(ChartOrders::getUserId, userId);
        lqw.eq(ChartOrders::getStatus, 1);
        lqw.orderByDesc(ChartOrders::getCreateTime); // 按 create_time 降序排序

        // 使用分页查询
        Page<ChartOrders> pagedResult = chartOrdersMapper.selectPage(page, lqw);

        // 获取查询结果
        List<ChartOrders> ordersList = pagedResult.getRecords();

        // 修改 totalPrice 字段的值，转换为元
        for (ChartOrders order : ordersList) {
            if (order.getTotalPrice() != null) {
                // 将分转换为元，保留两位小数
                BigDecimal priceInYuan = BigDecimal.valueOf(order.getTotalPrice())
                        .divide(BigDecimal.valueOf(100), 2, BigDecimal.ROUND_HALF_UP);
                order.setTotalPriceInYuan(priceInYuan);
            }

            // 处理 invoice 字段，当 invoice 为 null 或者为空时，将其设置为 0
            if (order.getInvoice() == null || order.getInvoice() == 0) {
                order.setInvoiceStatus("未开票");
            } else if (order.getInvoice() == 1) {
                order.setInvoiceStatus("已开票");
            }

            // 根据 status 设置支付状态
            if (order.getStatus() != null) {
                if (order.getStatus() == 0) {
                    order.setPaymentStatus("未支付");
                } else if (order.getStatus() == 1) {
                    order.setPaymentStatus("已支付");
                }
            }
        }

        return ordersList;
    }

    @Override
    public PageInfo<ChartOrders> findPage(int page, int size, String phonenumber) {
        // 使用 PageHelper 开启分页
        PageHelper.startPage(page, size);

        // 调用 Mapper 方法执行 SQL 查询
        List<ChartOrders> ordersList = chartOrdersMapper.findUserOrders(phonenumber);

        // 使用 PageInfo 封装分页结果
        return new PageInfo<>(ordersList);
    }

    @Override
    public List<ChartOrders> queryOrder() {
        return chartOrdersMapper.queryOrder();
    }


}

